Simple Factory | Factory | Abstract Factory | |
---|---|---|---|
定義 | 單一個 Method 來決定要 Return 哪一種 Product 的實例 | 定義了一個創建對象的 Interface,但由子類別決定實例化哪一個類。Factory Method 讓類的實例化推遲到子類 | 提供一個Interface,讓該Interface的子類別決定實例化哪一系列的產品家族 |
使用時機 | 要創建的對象相對較少 (簡單) | 當系統需要多個產品家族中的一員時,且系統只知道需要某個具體類(Concrete Class) 的時候 | 當系統中涉及到多個產品系列,但系統只消費其中一個系列的產品時 |
抽象性 | 低 | 中 | 高 |
擴展性 | 差(需修改工廠方法) | 較好(增加新的具體工廠) | 較好(增加新的具體工廠及產品家族) |
差異 | Simple Factory 是最簡單的工廠模式,它只包含一個工廠類,負責所有產品的創建。當新的產品被加入時,需要修改工廠方法 | Factory Method 使用多個工廠類,每個工廠類對應一種產品。當需要擴展產品時,只需要增加相對應的工廠類 | Abstract Factory 使用多個產品家族,每個產品家族由多個產品組成。當需要擴展產品家族或產品時,可以增加相對應的工廠類和產品類 |
[1]. https://www.baeldung.com/cs/factory-method-vs-factory-vs-abstract-factory
[2]. https://refactoring.guru/design-patterns/factory-method
[3]. https://refactoring.guru/design-patterns/abstract-factory